package com.study.services;

import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.study.model.jdao.OutboundJDao;
import com.study.model.mdao.InventoryMapper;
import com.study.model.mdao.OutboundMapper;
import com.study.model.mdao.ProductMapper;
import com.study.model.pojo.Inbound;
import com.study.model.pojo.Outbound;


@Service
public class OutboundService {
	@Autowired
	OutboundMapper oMapper;
	@Autowired
	ProductMapper pMapper;
	@Autowired
	InventoryMapper imMapper;
	@Autowired
	OutboundJDao oDao;
	
	/*
	 * 查询全部出库信息
	 */
	public List<Outbound> findAll(){
		return oMapper.findAll();
	}
	
	/*
	 * 查询出库记录数
	 */
	public int findcount() {
		return oMapper.findcount();
	}
	
	public List<Outbound> findByintName(String intName){
		return oMapper.findByintName(intName);
	}
	
	/**
	 * 出库
	 * @param map 出库信息
	 * @param proId 产品id
	 * @param warName 仓库名称
	 * @param outNum 出库数量
	 */
	public String outbound(HashMap map, String proId, String warName,int outNum) {
		int i=pMapper.findexist(proId);//是否存在
		String returnString;
		//判断是否存在，如果存在，执行出库
		if (i==1) {
			oMapper.addOutbound(map);//新增出库信息
			returnString="y";
			return returnString;
		}else {
			returnString="n";
			return returnString;
		}
	}
	
	/**
	 * 修改出库信息
	 * @param map
	 */
	public void editOutbound(HashMap map) {
		oMapper.editOutbound(map);
	}
	
	/**
	 * 删除出库信息
	 * @param outId
	 */
	public void delOutbound(String outId) {
		oMapper.delOutbound(outId);
	}
	
	/**
	 * 审核通过
	 * @param outId
	 */
	public void pass(String outId) {
		oMapper.pass(outId);//修改审核
		Outbound outbound=oDao.findByoutId(outId);//根据编号查询
		System.out.println("id="+outbound.getOutId());
		HashMap map=new HashMap<>();
		map.put("outId", outId);
		map.put("outStatic", outbound.getOutStatic());
		System.out.println("map="+map);
		int i=oMapper.exit(map);//判断
		System.out.println("i="+oMapper.exit(map));
		if (i>0) {
			HashMap map1=new HashMap<>();
			map1.put("proId", outbound.getProduct().getProId());
			map1.put("warName", outbound.getWarName());
			System.out.println("map1="+map1);
			int z=imMapper.findByproIdAndwarName(map1);//寻找符合条件的产品，判断是否存在
			System.out.println("z="+z);
			if (z==1) {
				int j1=imMapper.findForinvNum(map1).getInvNum();//查询符合条件产品的库存数量
				int j2=imMapper.findForinvNum(map1).getInvHeight();//查询符合条件产品的挤压库存预警数量
				int j3=imMapper.findForinvNum(map1).getInvLow();//获取符合条件产品的低库存预警数
				j1=j1-outbound.getOutNum();
				//判断出库后是否存在低库存状态
				if (j1<j3) {
					map1.put("invStatic", "低库存预警");
					imMapper.editinvStatic(map1);//修改库存状态保持低库存状态
				}
				if (j3<j1&&j1<j2) {
					map1.put("invStatic", "正常");
					imMapper.editinvStatic(map1);//修改库存状态，由正常改为库存积压
				}
				HashMap map2=new HashMap<>();
				map2.put("proId", outbound.getProduct().getProId());
				map2.put("invNum", j1);
				map2.put("warName", outbound.getWarName());
				System.out.println("map2"+map2);
				imMapper.editinvNum(map2);//修改库存
			}
		}
	}
	
	
	/**
	 * 报损出库
	 * @param map 出库信息
	 * @param proId 产品id
	 * @param warName 仓库名称
	 * @param outNum 出库数量
	 */
	public void outlossbound(HashMap map, String proId, String warName,int outNum) {
		int i=pMapper.findexist(proId);//是否存在
		//判断是否存在，如果存在，执行入库
		if (i==1) {
			HashMap map1=new HashMap<>();
			map1.put("proId", proId);
			map1.put("warName", warName);
			int z=imMapper.findByproIdAndwarName(map1);//寻找符合条件的产品，判断是否存在
			if (z==1) {
				oMapper.addOutbound(map);//新增出库信息
				int j1=imMapper.findForinvNum(map1).getInvNum();//查询符合条件产品的库存数量
				int j2=imMapper.findForinvNum(map1).getInvHeight();//查询符合条件产品的挤压库存预警数量
				int j3=imMapper.findForinvNum(map1).getInvLow();//获取符合条件产品的低库存预警数
				j1=j1-outNum;
				//判断出库后是否存在低库存状态
				if (j1<j3) {
					map1.put("invStatic", "低库存预警");
					imMapper.editinvStatic(map1);//修改库存状态保持低库存状态
				}
				if (j3<j1&&j1<j2) {
					map1.put("invStatic", "正常");
					imMapper.editinvStatic(map1);//修改库存状态，由正常改为库存积压
				}
				HashMap map2=new HashMap<>();
				map2.put("proId", proId);
				map2.put("invNum", j1);
				map2.put("warName", warName);
				imMapper.editinvNum(map2);//修改库存
			}
		}
	}
}
